import axios, { AxiosRequestConfig } from 'axios'
import { ElMessage } from 'element-plus'

const request = axios.create({
  // baseURL: import.meta.env.VITE_API_BASEURL // 基础路径
})

// request 不支持泛型
// request.get、post、put 支持泛型
// 由于我们的后端又包装一层数据 data，导致我们访问数据比较麻烦，所以我们自己封装了一个request

// 请求拦截器
request.interceptors.request.use(config => {
  // 统一设置用户身份 Token
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(response => {
  // 统一处理响应错误，例如 token 无效、服务端异常等
  if (response.data.status && response.data.status !== 200) {
    ElMessage.error(response.data.msg)
    return Promise.reject(response.data)
  }
  return response
}, err => {
  return Promise.reject(err)
})

export default <T = any>(config:AxiosRequestConfig) => {
  return request(config).then(res => {
    return res.data.data as T
  })
}
